"""
配置
"""

from pathlib import Path

from starlette.config import Config

_config = Config(str(Path(__file__).resolve().parent / "develop.env"))
""" 加载开发环境配置 """


class _Const:
    """ 常量 配置 """

    ENCODING: str = "UTF-8"
    """ 编码格式 """

    PROJECT_NAME: str = "FAST"
    """ 项目名称 """


class _Format:
    """ 格式 配置 """

    DATE_FORMAT: str = "%Y-%m-%d"
    """
    日期格式

    YYYY-MM-DD
    """

    TIME_FORMAT: str = "%H:%M:%S"
    """
    时间格式

    HH:mm:ss
    """

    DATETIME_FORMAT: str = "%Y-%m-%d %H:%M:%S"
    """
    日期时间格式

    YYYY-MM-DD HH:mm:ss
    """


class _MongoDB:
    """ MongoDB 配置 """

    HOST: str = str(_config("MONGODB.HOST"))
    """ 主机 IP 地址 """

    PORT: int = int(_config("MONGODB.PORT"))
    """ 端口号（默认为 27017） """

    DB_NAME: str = str(_config("MONGODB.DB_NAME"))
    """ 库名 """

    USERNAME: str = str(_config("MONGODB.USERNAME"))
    """ 用户名 """

    PASSWORD: str = str(_config("MONGODB.PASSWORD"))
    """ 密码 """

    URI: str = (
        f"mongodb://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/"
        if USERNAME and PASSWORD
        else f"mongodb://{HOST}:{PORT}/"
    )
    """ MongoDB 连接 URI（不包括库） """

    URL: str = f"{URI}{DB_NAME}"
    """ MongoDB 连接 URL """


class _Path:
    """ 路径 配置 """

    ROOT_DIR: str = str(Path(__file__).resolve().parent)
    """ 项目根目录 """


class _Regex:
    """ 正则 配置 """

    DATE_REGEX: str = r"^\d{4}-\d{2}-\d{2}"
    """
    日期 正则

    - 格式: YYYY-MM-DD
    - eg: 2024-01-30
    """

    TIME_REGEX: str = r"^\d{2}:\d{2}:\d{2}"
    """
    时间 正则

    - 格式: HH:mm:ss
    - eg: 14:04:28
    """

    DATETIME_REGEX: str = r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}"
    """
    日期时间 正则

    - 格式: YYYY-MM-DD HH:mm:ss
    - eg: 2024-01-30 14:04:28
    """


class _Security:
    """ 安全配置 """

    ALGORITHM: str = str(_config("ALGORITHM"))
    """ 加密算法 """

    ACCESS_TOKEN_EXPIRE_MINUTES: int = int(_config("ACCESS_TOKEN_EXPIRE_MINUTES"))
    """ Token 过期时间（分钟） """

    SECRET_KEY: str = str(_config("SECRET_KEY"))
    """ 密钥（用于签名、加密等） """

    TOKEN_MAX_AGE: int = int(_config("TOKEN_MAX_AGE"))
    """ Token 过期天数 """


class settings:  # noqa
    """ 项目配置 """

    CONST = _Const
    """ 常量 配置 """

    MONGODB = _MongoDB
    """ MongoDB 配置 """

    PATH = _Path
    """ 路径 配置 """

    REGEX = _Regex
    """ 正则 配置 """

    SECURITY = _Security
    """ 安全 配置 """

    FORMAT = _Format
    """ 格式 配置 """
